home *** CD-ROM | disk | FTP | other *** search
/ Celestin Apprentice 4 / Apprentice-Release4.iso / Languages / Oberon⁄F™ 1.1 / Obx / Docu / Db0 (.txt) < prev    next >
Encoding:
Oberon Document  |  1996-01-05  |  4.5 KB  |  106 lines  |  [oODC/obnF]

  1. Documents.StdDocumentDesc
  2. Documents.DocumentDesc
  3. Containers.ViewDesc
  4. Views.ViewDesc
  5. Stores.StoreDesc
  6. Documents.ModelDesc
  7. Containers.ModelDesc
  8. Models.ModelDesc
  9. Stores.ElemDesc
  10. TextViews.StdViewDesc
  11. TextViews.ViewDesc
  12. TextModels.StdModelDesc
  13. TextModels.ModelDesc
  14. TextModels.AttributesDesc
  15. Helvetica
  16. Helvetica
  17. Helvetica
  18. DevCommanders.StdViewDesc
  19. DevCommanders.ViewDesc
  20. Oberon by Example: ObxDb0
  21. This example provides two commands to the user. The first, EnterData, takes a text selection as input, and reads it line for line. Each line should consist of an integer number, followed by a string, trailed by a real number. Each such tuple is entered into a globally anchored linear list, sorted by the integer value. The second command, ListData, generates a text which displays the data currently in the list.
  22. The following text is not an embedded text view, since embedded views which are larger than one page tend to be cumbersome to use. To compile a text like the one below, select its beginning (e.g. double-click on the keyword MODULE), and then execute Compile
  23. Selection from the Dev menu.
  24. MODULE ObxDb0;
  25.     IMPORT Views, TextModels, TextMappers, TextViews, TextControllers;
  26.     CONST
  27.         int = TextMappers.int; string = TextMappers.string;
  28.         real = TextMappers.real; invalid = TextMappers.invalid;
  29.     TYPE
  30.         Node = POINTER TO RECORD
  31.             next: Node;
  32.             id: LONGINT;
  33.             name: TextMappers.String;
  34.             value: REAL
  35.         END;
  36.     VAR list: Node;
  37.     PROCEDURE Enter (id: LONGINT; name: TextMappers.String; value: REAL);
  38.         VAR n, h, p: Node;
  39.     BEGIN
  40.         NEW(n); n.id := id; n.name := name; n.value := value;
  41.         h := list; p := NIL; WHILE (h # NIL) & (h.id <= id) DO p := h; h := h.next END;
  42.         IF p # NIL THEN    (* insert between p and h *)
  43.             p.next := n
  44.         ELSE    (* insert at beginning *)
  45.             list := n
  46.         END;
  47.         n.next := h
  48.     END Enter;
  49.     PROCEDURE EnterData*;
  50.         VAR c: TextControllers.Controller; beg, end: LONGINT;
  51.             s: TextMappers.Scanner; id: LONGINT;
  52.             name: TextMappers.String; value: REAL;
  53.     BEGIN
  54.         c := TextControllers.Focus();
  55.         IF (c # NIL) & c.HasSelection() THEN
  56.             c.GetSelection(beg, end);
  57.             s.ConnectTo(c.text); s.SetPos(beg);
  58.             s.Scan;
  59.             WHILE (s.type = TextMappers.int) & (s.Pos() <= end) DO
  60.                 IF s.type = int THEN id := s.int; s.Scan ELSE s.type := TextMappers.invalid END;
  61.                 IF s.type = string THEN name := s.string; s.Scan ELSE s.type := invalid END;
  62.                 IF s.type = real THEN value := SHORT(s.real); s.Scan ELSE s.type := invalid END;
  63.                 Enter(id, name, value)
  64.             END;
  65.             c.SelectAll(FALSE)
  66.         END
  67.     END EnterData;
  68.     PROCEDURE ListData*;
  69.         VAR t: TextModels.Model; n: Node; f: TextMappers.Formatter;
  70.     BEGIN
  71.         t := TextModels.dir.New();
  72.         f.ConnectTo(t); f.SetPos(0);
  73.         n := list;
  74.         WHILE n # NIL DO
  75.             f.WriteInt(n.id); f.WriteTab; f.WriteString(n.name); f.WriteTab; f.WriteReal(n.value);
  76.             f.WriteLn;
  77.             n := n.next
  78.         END;
  79.         Views.OpenView(TextViews.dir.New(t))
  80.     END ListData;
  81.     PROCEDURE Reset*;
  82.     BEGIN
  83.         list := NIL    (* release data structure so that garbage collector can reclaim memory *)
  84.     END Reset;
  85. END ObxDb0.
  86.  ObxDb0.EnterData        
  87.  ObxDb0.ListData        
  88.  ObxDb0.Reset
  89. To try out the example, select the following lines, and then click the left commander above:
  90. 1    Cray    14.8
  91. 3    NEC    16.6
  92. 2    IBM    8.3
  93. Now click the middle commander, as a result a window opens with the sorted input. If you repeat both steps, you'll note that the input has been added to the list a second time, and that consequently every item appears twice in the output.
  94. This example has shown how a text can be scanned symbol by symbol, instead of character by character.
  95. TextControllers.StdCtrlDesc
  96. TextControllers.ControllerDesc
  97. Containers.ControllerDesc
  98. Controllers.ControllerDesc
  99. TextRulers.StdRulerDesc
  100. TextRulers.RulerDesc
  101. TextRulers.StdStyleDesc
  102. TextRulers.StyleDesc
  103. TextRulers.AttributesDesc
  104. Helvetica
  105. Documents.ControllerDesc
  106.